iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 13
0
Software Development

從Java進入AWS部署RESTful API的心路歷程系列 第 13

Day13-實作(五)Jackson annotation

  • 分享至 

  • xImage
  •  

本篇稍微列出使用Jackson處理request/response方法,如果已經熟悉的同學可以用自己喜歡的方式處理,並沒有限定怎麼做才是好的喔。

JsonView

我們通常會針對資料定義設計出schema,通常也以此實作bean。但有時候因為資料或功能模組定義,針對同樣的項目(table/item)允許或需要操作的欄位(column/attribute)有所不同。當然,每支handler取得參數都還是需要完整確認資料內容的完整性,但是Json也提供了view來讓你直接定義不同情境下使用的屬性那些。

Jackson JSON Views
官方教學第一步,就是建立一個空的Views class,而這邊先假設情境request/response使用的內容不同,我們可以這樣定義

public class Views {
    public static class Public {}
    public static class Request extends Public {}
    public static class Response extends Public {}
}

最主要就是能讓你使用class type當作參數用在annotation描述定義

@JsonView({ Views.Public.class })
private String firstName;
@JsonView({ Views.Public.class })
private String lastName;
@JsonView({ Views.Public.class })
private String email;
@JsonView({ Views.Request.class })
private String password;
@JsonView({ Views.Response.class })
private Date create_date;
@JsonView({ Views.Response.class })
private Date update_date;

如果這樣實作,可以表示firstName、lastName、email在request/response都有用到。password只有request會用到。create_date、update_date只有response會使用到。

這時候之前先準備好的View參數就有用了,我們可以應用view取得request

Person person = input.getBody(Person.class, Views.Request.class);

或是使用view產生response,避免不需要的內容出現在不適合的地方

return new ResponseBean(person, Views.Response.class);

當然,上面Views的設計只是方便舉例,實際上開那些Views還是要看實務需要而定。

JsonFormat

Jackson Date

Java Date如果直接對應json預設是數值 (number of milliseconds since January 1st, 1970, UTC) ,使用上還得自己轉換很不方便,可以使用format對應格式化字串如下

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd hh:mm:ss")
private Date create_date;

後記

寫到這邊發現我目前用到的json annotation也不多,比較多是設計上的變化,之後遇到實用的再回來補充吧...


上一篇
Day12-實作(四)Request類型的基本判斷
下一篇
Day14-概觀(五)DynamoDB基本
系列文
從Java進入AWS部署RESTful API的心路歷程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言